package com.pkx.guide.info.service.impl;

import com.pkx.guide.file.service.SysFileService;
import com.pkx.guide.info.entity.TInfoGuideImg;
import com.pkx.guide.info.mapper.TInfoGuideImgMapper;
import com.pkx.guide.info.service.TInfoGuideImgService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.transaction.annotation.Transactional;

/**
 * 诱导屏图片表 服务实现类
 *
 * @author sunsy
 * @since 2023-11-14
 */
@Service
public class TInfoGuideImgServiceImpl extends ServiceImpl<TInfoGuideImgMapper, TInfoGuideImg> implements TInfoGuideImgService {

    @Resource
    private SysFileService sysFileService;

    /**
     * 分页列表
     *
     * @param tInfoGuideImg
     * @return
     */
    @Override
    public IPage<TInfoGuideImg> pageList(Page page, TInfoGuideImg tInfoGuideImg) {
        LambdaQueryWrapper<TInfoGuideImg> lambdaQueryWrapper = new QueryWrapper<TInfoGuideImg>().lambda();
        lambdaQueryWrapper.eq(tInfoGuideImg.getId() != null, TInfoGuideImg::getId, tInfoGuideImg.getId());
        lambdaQueryWrapper.eq(tInfoGuideImg.getImgContentType() != null, TInfoGuideImg::getImgContentType, tInfoGuideImg.getImgContentType());
        lambdaQueryWrapper.eq(tInfoGuideImg.getGuideType() != null, TInfoGuideImg::getGuideType, tInfoGuideImg.getGuideType());
        lambdaQueryWrapper.eq(tInfoGuideImg.getLaneNo() != null, TInfoGuideImg::getLaneNo, tInfoGuideImg.getLaneNo());
        lambdaQueryWrapper.eq(TInfoGuideImg::getDelFlg, 0);
        return page(page, lambdaQueryWrapper);
    }

    /**
     * 列表查询
     *
     * @param tInfoGuideImg
     * @return
     */
    @Override
    public List<TInfoGuideImg> listByEntity(TInfoGuideImg tInfoGuideImg) {
        LambdaQueryWrapper<TInfoGuideImg> lambdaQueryWrapper = new QueryWrapper<TInfoGuideImg>().lambda();
        lambdaQueryWrapper.eq(tInfoGuideImg.getId() != null, TInfoGuideImg::getId, tInfoGuideImg.getId());
        lambdaQueryWrapper.eq(tInfoGuideImg.getImgContentType() != null, TInfoGuideImg::getImgContentType, tInfoGuideImg.getImgContentType());
        lambdaQueryWrapper.eq(tInfoGuideImg.getGuideType() != null, TInfoGuideImg::getGuideType, tInfoGuideImg.getGuideType());
        lambdaQueryWrapper.eq(tInfoGuideImg.getLaneNo() != null, TInfoGuideImg::getLaneNo, tInfoGuideImg.getLaneNo());
        lambdaQueryWrapper.eq(TInfoGuideImg::getDelFlg, 0);
        return list(lambdaQueryWrapper);
    }

    /**
     * 详情
     *
     * @param id
     * @return
     */
    @Override
    public TInfoGuideImg selectById(Integer id) {
        return getById(id);
    }

    /**
     * 详情
     *
     * @param imgNum
     * @param laneNo
     * @return
     */
    @Override
    public TInfoGuideImg selectByBean(Integer imgNum, Integer laneNo){
        LambdaQueryWrapper<TInfoGuideImg> lambdaQueryWrapper = new QueryWrapper<TInfoGuideImg>().lambda();
        lambdaQueryWrapper.eq(TInfoGuideImg::getImgNum, imgNum);
        lambdaQueryWrapper.eq(TInfoGuideImg::getLaneNo, laneNo);
        lambdaQueryWrapper.eq(TInfoGuideImg::getDelFlg, 0);
        lambdaQueryWrapper.last("limit 1");
        return getOne(lambdaQueryWrapper);
    }

    /**
     * 保存
     *
     * @param tInfoGuideImg
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean saveTInfoGuideImg(TInfoGuideImg tInfoGuideImg) {
        return save(tInfoGuideImg);
    }

    /**
     * 修改
     *
     * @param tInfoGuideImg
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean modify(TInfoGuideImg tInfoGuideImg) {
        return updateById(tInfoGuideImg);
    }

    /**
     * 删除
     *
     * @param id
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean deleteById(Integer id) throws Exception {
        if (id == null){
            return false;
        }
        // 删除物理路径图片
        TInfoGuideImg guideImg = selectById(id);
        if (guideImg != null && guideImg.getDelFlg() == 0){
            sysFileService.deleteFile(guideImg.getImgPath());
        }
        LambdaUpdateWrapper<TInfoGuideImg> lambdaUpdateWrapper = new UpdateWrapper<TInfoGuideImg>().lambda()
            .eq(TInfoGuideImg::getId, id)
            .set(TInfoGuideImg::getDelFlg, 1);
        return update(lambdaUpdateWrapper);
    }
}
